查看原文
其他

Saltstack 集中化管理平台安装

JackTian 杰哥的IT之旅 2022-06-06

简介

SaltStack(http://www.saltstack.com/)是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet(http://puppetlabs.com/)和加强版的func(https://fedorahosted.org/func/) Ansible。


SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。有如下特性:

  • 部署简单、方便;

  • 支持大部分UNIX/Linux及Windows环境;

  • 主从集中化管理;

  • 配置简单、功能强大、扩展性强;

  • 主控端(master)和被控端(minion)基于证书认证,安全可靠;

  • 支持API及自定义模块,可通过Python轻松扩展。


通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。目前Saltstack已经趋向成熟,用户群及社区活跃度都不错,同时官方也开放了不少子项目,具体可访问https://github.com/saltstack获得。


SaltStack支持多种操作系统,如CentOS、RedHat、Debian、Ubuntu、FreeBSD、Solaris、Fedora、SuSe、Gentoo、MAC OS X、Archlinux等,以及Windows(仅支持Minion)。


官方文档:http://docs.saltstack.com

中国SaltStack用户组:http://www.saltstack.cn

Saltstack的安装

Saltstack的不同角色服务安装非常简单,建议采用yum源方式来实现部署,下面简单介绍具体步骤。


1.业务环境说明


通过部署一组业务功能服务器来进行演示,操作系统版本为CentOS release 6.5,自Python 2.6.6,相关服务器信息如表。


角色

ID

IP

Groupsnmode

master

saltstack_master.test.com

192.168.1.182


minion

saltstack_web1group_1

192.168.1.183

web1group

minion

saltstack_web1group_2

192.168.1.184

web1group


修改master服务端hosts文件及master端/minion端主机名;

[root@saltstack-master salt]# vim /etc/hosts192.168.1.182 saltstack_master.test.com192.168.1.183 saltstack_web1group1_1192.168.1.184 saltstack_web1group1_2[root@saltstack-master salt]# vim /etc/sysconfig/networkNETWORKING=yesHOSTNAME=saltstack_master.test.com[root@saltstack_web1group_1 ~]# vim /etc/sysconfig/networkNETWORKING=yesHOSTNAME=saltstack_web1group1_1[root@saltstack_web1group_2 ~]# vim /etc/sysconfig/networkNETWORKING=yesHOSTNAME=saltstack_web1group1_2

挂载光盘,安装EPEL,由于目前RHEL官网yum源还没有Saltstack的软件包支持,因此先安装EPEL作为部署Saltstack的默认yum源。

[root@saltstack-master ~]# mount /dev/cdrom /mntmount: block device /dev/sr0 is write-protected, mounting read-only[root@saltstack-master ~]# rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpmRetrieving https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpmwarning: /var/tmp/rpm-tmp.ZGqN4N: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEYPreparing... ########################################### [100%]   1:epel-release           ########################################### [100%]

主服务器安装Saltstack

[root@saltstack-master ~]# yum -y install salt-masterComplete![root@saltstack-master ~]# chkconfig salt-master on[root@saltstack-master ~]# service salt-master startStarting salt-master daemon:                               [确定]

从服务器安装Saltstack

[root@saltstack_web1group_1 ~]# yum -y install salt-minion[root@saltstack_web1group_1 ~]# chkconfig salt-minion on[root@saltstack_web1group_1 ~]# service salt-minion startStarting salt-minion daemon:                               [确定][root@saltstack_web1group_2 ~]# yum -y install salt-minion[root@saltstack_web1group_2 ~]# chkconfig salt-minion on[root@saltstack_web1group_2 ~]# service salt-minion startStarting salt-minion daemon: [确定]

SaltStack防火墙配置


SaltStack master启动后默认监听 4505 和 4506 两个端口。

4505:publish port 为 saltstack 的消息发布系统

4506:ret port 为 saltstack 被控制与服务端通信的端口。


如果使用 lsof 查看4505端口,会发现所有的 minion 在4505端口持续保持在ESTABLISHED状态。


在主控制端添加TCP 4505,TCP 4506的规则,而在被控端无须配置防火墙,原理是被控端直接与主控端的zeromq建立长连接,接受广播到的任务信息并执行,添加两条iptables规则:

[root@saltstack-master ~]# iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT[root@saltstack-master ~]# iptables -I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT

更新 SaltStack 配置及安装校验


Saltstack分两种角色:一种为master(主控端),另一种为minion(被控端),安装完毕后要对两种角色的配置文件进行修改。


master 主控端配置

[root@saltstack-master ~]# vim /etc/salt/master15 interface: 192.168.1.182  #绑定master通信IP215 auto_accept: True #自动认证,避免手动运行salt-key来确认证书信任406 file_roots: #指定Saltstack文件根目录位置407 base:408    - /srv/salt/[root@saltstack-master ~]# service salt-master restartStopping salt-master daemon: [确定]Starting salt-master daemon:                               [确定]

minion被控端配置

[root@saltstack_web1group_1 ~]# vim /etc/salt/minion17   master: 192.168.1.182 #指定master主机IP地址18   id:  saltstack_web1group_1 #修改被控端主机识别id,建议使用操作系统主机名来配[root@saltstack_web1group_1 ~]# service salt-minion restartStopping salt-minion daemon:                               [确定]Starting salt-minion daemon:                               [确定][root@saltstack_web1group_2 ~]# vim /etc/salt/minion17   master: 192.168.1.18218 id: saltstack_web1group_1[root@saltstack_web1group_2 ~]# service salt-minion restartStopping salt-minion daemon: [确定]Starting salt-minion daemon: [确定]

Saltstack master minion 配置文件

Master端的配置是修改/etc/salt下master配置文件。以下是Master端常用的配置。interface:指定bind 的地址(默认为0.0.0.0)publish_port:指定发布端⼝(默认为4505)ret_port:指定结果返回端⼝,与minion配置⽂件中的master_port对应(默认为4506)user:指定master 进程的运⾏⽤户,如果调整,则需要调整部分目录的权限(默认为root)timeout:指定timeout时间,如果minion规模庞大或网络状况不好,建议增⼤该值(默认5s)keep_jobs:默认情况下,minion会执⾏结果会返回master,master会缓存到本地的cachedir ⺫录,该参数指定缓存多⻓时间,以供查看之前的执⾏结果,会占⽤磁盘空间(默认为24h)job_cache:master 是否缓存执⾏结果,如果规模庞⼤(超过5000台),建议使⽤其他⽅式来存储jobs,关闭本选项(默认为True)file_recv:是否允许minion传送⽂件到master 上(默认是Flase)file_roots:指定file server登录,  默认为:file_roots: base: - /srv/salt pillar_roots : 指定pillar 登录, 默认为:pillar_roots: base: - /srv/pillar log_level:执行日志级别,支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)
Minion常用配置master:指定master 主机(默认为salt)master_port:指定认证和执行结果发送到master的哪个端⼝,与master配置组件中的ret_port 对应(默认为4506)id:指定本minion的标识,salt内部使 id作为标识(默认为主机名)user:指定运行minion的用户,由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)cache_jobs : minion 是否缓存执行结果(默认为False)backup_mode: 在组件操作(file.managed 或file.recurse) 时,  如果组件发生变更,指定备份指标.  当前有效的值为minion, 备份在cachedir/file_backups⺫录下,  以原始组件名称加时间戳来命名(默认为Disabled)providers :  指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5renderer: 指定配置管理系统中的渲染器(默认值为:yaml_jinja )file_client : 指定file clinet 默认去哪⾥(remote 或local) 寻找⽂件(默认值为remote)loglevel: 指定⽇志级别(默认为warning)tcp_keepalive : minion 是否与master 保持keepalive 检查, zeromq3 以下版本存在keepalive bug,会导致某些情况下连接异常后minion重连master. 建议有条件的话升级到zeromq 3以上版本(默认为True)
当/etc/salt/master 没有配置auto_accept: True时,需要通过salt-key 命令来进行证书认证操作,具体操作如下:salt-key -L #显示已经或未认证的被控端id,Accept Keys为已认证清单,Unaccepted Keys为未认证清单;salt-key -D #删除所有认证主机id证书salt-key -d id #删除单个id证书salt-key -A #接受所有id证书请求salt-key -a id    #接受单个id证书请求[root@saltstack-master salt]# salt-key -a  slaver.test.com[root@saltstack-master salt]# salt-key -a  master.test.com[root@saltstack-master salt]# salt-keyAccepted Keys:saltstack_web1group_1saltstack_web1group_2Denied Keys:Unaccepted Keys:Rejected Keys:

认证流程(密钥)

master/minion数据传输采用AES加密算法,salt支持自动认证

把公钥发给master

[root@saltstack-master salt]# cd /etc/salt/pki/master/[root@saltstack-master master]# tree.├── master.pem├── master.pub├── minions│ ├── saltstack_web1group_1│ └── saltstack_web1group_2├── minions_autosign├── minions_denied├── minions_pre└── minions_rejected
5 directories, 4 files

校验安装结果


通过test模块的ping方法,可以确认指定被控端设备与主控端是否建立信任关系及连通性是否正常,探测所有被控端采用’*’来代替’ saltstack_web1group_1’即可。

[root@saltstack-master salt]# salt 'saltstack_web1group_1' test.pingsaltstack_web1group_1: True[root@saltstack-master salt]# salt 'saltstack_web1group_2' test.pingsaltstack_web1group_2: True[root@saltstack-master salt]# salt '*' test.pingsaltstack_web1group_1: Truesaltstack_web1group_2:    True


推荐阅读:

1、Eclipse 那些小技巧(值得收藏)

2、这五本书…“咻”嘚一下就送出啦!

3、50 道网络面试题及答案(上)

4、50 道网络面试题及答案(下)

5、10分钟带你搞定 Linux awk命令

6、程序猿:“合格”与“不合格”的差距

7、我和你之间只差一个“空间感”

8、我必须得告诉大家的MySQL优化原理


资源分享:

T级技术资源大放送!包括但不限于:Linux、Python、Java、前端、测试、大数据、人工智能等,具体获取方式请点击下方链接进行查看~资料大放送①期 | 这份资料很特别!


扫它,来撩杰哥~


长按 识别二维码 关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存